﻿using SAPbouiCOM;


namespace SapFramework.Interface.Events
{
    /// <summary>
    /// Interface que define as funções que mapeiam eventos dentro do SAP Business One
    /// </summary>
    public interface IEventHandler
    {
        /// <summary>
        /// Realiza o tratamento de eventos da aplicação.
        /// </summary>
        /// <param name="aEventType">O tipo do <see cref="BoAppEventTypes">evento</see> disparado pela aplicação.</param>
        void ApplicationEventHandler( BoAppEventTypes aEventType );

        /// <summary>
        /// Realiza o tratamento de eventos de itens de menu da aplicação, especificamente quando ocorre um click sobre eles.
        /// </summary>
        /// <param name="aEventInfo">Contém informações específicas do evento do menu.</param>
        /// <param name="aKeepEventPropagation">Indica se o evento deverá ser propagado devolta para o SAP Business One. Relevante apenas quando <see cref="MenuEvent.BeforeAction"/> for verdadeiro</param>
        void MenuEventHandler( ref MenuEvent aEventInfo, out bool aKeepEventPropagation );

        /// <summary>
        /// Realiza o tratamento de eventos do formulário quando este adiciona, atualiza, exclui ou carrega dados..
        /// </summary>
        /// <param name="aEventInfo">Contém informações específicas do evento de dados no formulário.
        /// <remarks>
        /// Este parâmetro fornece a propriedade <see cref="BusinessObjectInfo.ObjectKey">ObjectKey</see>, que contém a chave do objeto do formulário.
        /// </remarks>
        /// </param>
        /// <param name="aKeepEventPropagation">Indica se o evento deverá ser propagado devolta para o SAP Business One. Relevante apenas quando <see cref="BusinessObjectInfo.BeforeAction"/> for verdadeiro</param>
        void FormDataEventHandler( ref BusinessObjectInfo aEventInfo, out bool aKeepEventPropagation );

        /// <summary>
        /// Realiza o tratamento de eventos de itens de um formulário (ele próprio incluso).
        /// </summary>
        /// <param name="aFormUniqueId">O código de identificação único para o formulário em questão.</param>
        /// <param name="aEventInfo">Contém informações específicas do evento do item/formulário.</param>
        /// <param name="aKeepEventPropagation">Indica se o evento deverá ser propagado devolta para o SAP Business One. Relevante apenas quando <see cref="ItemEvent.BeforeAction"/> for verdadeiro</param>
        void ItemEventHandler( string aFormUniqueId, ref ItemEvent aEventInfo, out bool aKeepEventPropagation );

        /// <summary>
        /// Permite um tratamento global dos eventos gerados pelo botão direito do mouse.
        /// </summary>
        /// <param name="aEventInfo">Contém informações específicas do evento relacionado ao click do mouse.</param>
        /// <param name="aKeepEventPropagation">Indica se o evento deverá ser propagado devolta para o SAP Business One. Relevante apenas quando <see cref="ContextMenuInfo.BeforeAction"/> for verdadeiro</param>
        void RightClickEventHandler( ref ContextMenuInfo aEventInfo, out bool aKeepEventPropagation );

        /// <summary>
        /// Permite o tratamento de eventos que indiquem uma tentativa de impressão no sistema.
        /// </summary>
        /// <remarks>
        /// Um evento de impressão ocorre quando:
        /// <list type="bullets">
        /// <item>O usuário clica sobre os icones <value>Print</value> ou <value>Print Preview</value>;</item>
        /// <item>O usuário envia um documento para impressão através da opção de impressão de documentos <value>Document Printing</value></item>
        /// <item>O assistente de geração de documentos da aplicação envia um documento para impressão.</item>
        /// </list>
        /// </remarks>
        /// <remarks>
        /// O evento de impressão ocorre após o evento de seleção do relatório.
        /// </remarks>
        /// <param name="aEventInfo">Contém informações relevantes a impressão do documento.</param>
        /// <param name="aKeepEventPropagation">Indica se o evento deverá ser propagado devolta para o SAP Business One. Relevante apenas quando <see cref="PrintEventInfo.BeforeAction"/> for verdadeiro</param>
        /// <see cref="ReportDataEventHandler"/>
        void PrintEventHandler( ref PrintEventInfo aEventInfo, out bool aKeepEventPropagation );

        /// <summary>
        /// Permite o tratamento de eventos que indiquem uma seleção de relatório para impressão.
        /// </summary>
        /// <remarks>
        /// Um evento de impressão ocorre quando:
        /// <list type="bullets">
        /// <item>O usuário clica sobre os icones <value>Print</value> ou <value>Print Preview</value>;</item>
        /// <item>O usuário envia um documento para impressão através da opção de impressão de documentos <value>Document Printing</value></item>
        /// <item>O assistente de geração de documentos da aplicação envia um documento para impressão.</item>
        /// </list>
        /// </remarks>
        /// <remarks>
        /// O evento de seleção do relatório ocorre antes do evento de impressão.
        /// </remarks>
        /// <param name="aEventInfo">Contém informações relevantes a impressão do documento.</param>
        /// <param name="aKeepEventPropagation">Indica se o evento deverá ser propagado devolta para o SAP Business One. Relevante apenas quando <see cref="PrintEventInfo.BeforeAction"/> for verdadeiro</param>
        /// <see cref="PrintEventHandler"/>
        void ReportDataEventHandler( ref ReportDataInfo aEventInfo, out bool aKeepEventPropagation );

        /// <summary>
        /// Permite o tratamento de eventos na barra de progresso, disparados quando ela é criada, parada ou liberada.
        /// </summary>
        /// <param name="aEventInfo">Contém informações do evento.</param>
        /// <param name="aKeepEventPropagation">Indica se o evento deverá ser propagado devolta para o SAP Business One. Relevante apenas quando <see cref="ProgressBarEvent.BeforeAction"/> for verdadeiro</param>
        void ProgressBarEventHandler( ref ProgressBarEvent aEventInfo, out bool aKeepEventPropagation );

        /// <summary>
        /// Permite o tratamento de mensagens que são enviadas para a barra de status.
        /// </summary>
        /// <param name="aText">Mensagem de texto enviada para a barra de mensagens.</param>
        /// <param name="aMessageType">O tipo da mensagem.</param>
        void StatusBarEventHandler( string aText, BoStatusBarMessageType aMessageType );

        /// <summary>
        /// Permite o tratamento de eventos disparados quando se realiza a impressão ou visualização de um formulário de um Add-On.
        /// </summary>
        /// <remarks>
        /// Permite escolher a chave do layout que será utilizado.
        /// </remarks>
        /// <param name="aEventInfo">Contém informações do evento e permite escolher uma chave para o layout.</param>
        /// <param name="aKeepEventPropagation">Indica se o evento deverá ser propagado devolta para o SAP Business One. Relevante apenas quando <see cref="LayoutKeyInfo.BeforeAction"/> for verdadeiro</param>
        void LayoutKeyEventHandler( ref LayoutKeyInfo aEventInfo, out bool aKeepEventPropagation );

        /// <summary>
        /// Permite o tratamento de eventos para quando ocorrer a criação de Widgets.
        /// </summary>
        /// <param name="aEventInfo">Contém informações do evento especificas para Widgets.</param>
        /// <param name="aKeepEventPropagation">Indica se o evento deverá ser propagado, executando devidamente o Widget, ou se ele deverá ser cancelado.</param>
        void WidgetEventHandler( ref WidgetData aEventInfo, out bool aKeepEventPropagation );
        
        
    }
}